package cn.mdmm.service.user;

import java.util.List;

import org.springframework.remoting.service.annotation.RemoteService;

import cn.mdmm.entity.response.ResponseBodyToOne;
import cn.mdmm.entity.system.SysRole;
import cn.mdmm.entity.system.SysRoleUser;
import cn.mdmm.entity.system.SysUser;
import cn.mdmm.entity.user.request.UserRequest;
import cn.mdmm.entity.user.request.UserUpdatePwdRequest;
import cn.modoumama.common.response.Response;
import cn.modoumama.notice.annotation.NoticeApi;
import cn.modoumama.service.base.BaseService;

@RemoteService
public interface UserService extends BaseService<SysUser,Long>{
	/**
	 * 用户修改密码
	 * @param id
	 * @param userPwd
	 * @param newPwd
	 * @param confirmPwd
	 */
	public void updateUserPwd(Long id,String userPwd,String newPwd,String confirmPwd);
	
	/**
	 * 查询用户
	 * @param request
	 * @return
	 */
	@NoticeApi(method="user.check",methodName="checkUser",methodMemo="验证用户，用于验证手机，登录名，邮箱",methodType=1)
	public Response checkUser(UserRequest request);
	
	/**
	 * 注册
	 * @param request
	 * @return
	 */
	@NoticeApi(method="user.register",methodName="register",methodMemo="用户注册",methodType=1)
	public ResponseBodyToOne register(UserRequest request);
	
	/**
	 * 登陆
	 * @param request
	 * @return
	 */
	@NoticeApi(method="user.login",methodName="login",methodMemo="用户登陆",methodType=1)
	public ResponseBodyToOne login(UserRequest request);
	
	/**
	 * 修改密码
	 * @param request
	 * @return
	 */
	@NoticeApi(method="user.updatePwd",methodName="updatePwd",methodMemo="用户修改密码",methodType=1,authLevel=2)
	public Response updatePwd(UserUpdatePwdRequest request);
	
	/**
	 * 重置密码（忘记密码，手机+验证码改密码）
	 * @param request
	 * @return
	 */
	@NoticeApi(method="user.resetPwd",methodName="resetPwd",methodMemo="重置密码",methodType=1)
	public Response resetPwd(UserUpdatePwdRequest request);
	
	/**
	 * 修改用户资料
	 * @param request
	 * @return
	 */
	@NoticeApi(method="user.updateUser",methodName="updateUser",methodMemo="修改用户信息",methodType=1,authLevel=2)
	public ResponseBodyToOne updateUser(UserRequest request);

	/**
	 * 获取用户所有角色的
	 * @return
	 */
	public List<SysRoleUser> getRoleIds(Long userId);
	
	/**
	 * 获取用户可以绑定的所有角色的
	 * @return
	 */
	public List<SysRole> getAllRole(Long userId);
	
	/**
	 * 用户绑定角色
	 * @param roleType 管理员的类型（角色类型）
	 * @param userId
	 * @param roleIds
	 */
	public SysUser  bindRoleUser(Integer roleType,Long userId,Long[] roleIds);
}
